応用情報技術者ではかなりの頻度で仮想記憶管理に関する問題が出題されます。ここでマスターしましょう。
![](https://shikaku-dou.com/wp-content/uploads/2023/06/10cc25eb9473f86f1baf31f7998b353f-1024x621.jpg)
仮想記憶管理とは?
プログラム実行中の主記憶装置の役割
CPUはプログラムを実行するとき、必要なデータや命令を保管している主記憶装置をデータをやり取りします。
![](https://shikaku-dou.com/wp-content/uploads/2023/05/6688dc6594814f5ac8959234fe892b9b-e1685148221812-1024x597.jpg)
プログラムによって必要な容量は異なります。
例えば、容量が16GBの主記憶装置を持つパソコンでは7GB必要なプログラムAと6GB必要なプログラムBの両方を動かすことが出来ます。
![](https://shikaku-dou.com/wp-content/uploads/2023/06/5191c0fd4c34b61e5f44e8be4a7903f1-e1686445477840-1024x192.jpg)
しかし、そこに追加で5GB必要なプログラムCを動かすことは出来ません。
プログラムを実行するために必要な主記憶装置の容量が足りないからです。
![](https://shikaku-dou.com/wp-content/uploads/2023/06/01a32d8a761f7672f7a3973e3c597b9c-e1686461264288-1024x235.jpg)
補助記憶装置を使った仮想記憶管理
主記憶装置だけでは容量が足りないので補助記憶装置を使って容量を拡張するのが仮想記憶管理です。
下図のように、補助記憶装置の一部を主記憶装置のように使うことが出来れば、24GB分のプログラムを実行することが出来ます。このような仕組みを仮想記憶管理と呼びます。
![](https://shikaku-dou.com/wp-content/uploads/2023/06/234c6a06151ccaf632dcfdc3c51d6491-e1686447304156-1024x448.jpg)
ページング方式
仮想記憶管理でプログラム実行に必要な容量を拡張できたとは言え、CPUがやり取りをするのはあくまでも主記憶装置です。
なので、プログラム実行によく使うデータは主記憶装置に、あまり使わないデータは補助記憶装置に保管する等の工夫が必要です。
![](https://shikaku-dou.com/wp-content/uploads/2023/06/d87fb1f3748262b701a5edc8fb82ef4a-e1686461911813-1024x527.jpg)
では、主記憶装置に存在せず、補助記憶装置に存在するデータを使う場合はどうするのでしょうか?
ページフォールト・ページアウト・ページイン
主記憶装置に存在せず、補助記憶装置に存在するデータを使う場合は次のSTEPで処理を行います。
- ページフォールト:主記憶装置にデータが存在しないことを確認する
- ページアウト:比較的必要ないデータを主記憶装置から補助記憶装置に追い出す
- ページイン:必要なデータを補助記憶装置から主記憶装置に戻す
ページフォールト→ページアウト→ページインの一連の流れをページングと言います。
主記憶装置に空き領域があれば、ページアウトをする必要が無いので、
ページフォールト→ページインの流れになります。
ページフォールト
CPUが必要とするデータが主記憶装置に存在しないことをページフォールトと言います。
![](https://shikaku-dou.com/wp-content/uploads/2023/06/e7c08d6c87d5d47e145700d2e1679a12-e1686462558795-1024x430.jpg)
ページアウト
比較的必要ないデータを主記憶装置から補助記憶装置に追い出すことをページアウトと言います。
![](https://shikaku-dou.com/wp-content/uploads/2023/06/29f287a8d5a261198eeaa65aae191eaa-e1686463039400-1024x474.jpg)
ページイン
必要なデータを補助記憶装置から主記憶装置に戻すことをページインと言います。
![](https://shikaku-dou.com/wp-content/uploads/2023/06/ddd2df294e42547ca43a6888badd0e78-e1686463387408-1024x476.jpg)
ページ置換えアルゴリズム
ページアウトするとき、どのデータを補助記憶装置に追い出すのか決定する必要があります。その方法には以下の4つがあります。
- FIFO (First In First Out)
一番最初に主記憶装置に入れたデータを追い出します。 - LIFO (Last In First Out)
一番最後に主記憶装置に入れたデータを追い出します。 - LRU (Least Recently Used)
最も長く使用されていないデータを追い出します。 - LFU (Least Frequently Used)
最も使用頻度が低いデータを追い出します。
主記憶装置にデータを読み込む方式
CPUがプログラム実行中に主記憶装置にデータを要求しますが、その方法には「デマンドページング」と「プリページング」の2種類あります。
デマンドページング
必要なデータのみを主記憶装置に要求する。
メリット
主記憶装置の容量の使用量を最小限に出来る。
デメリット
プリページングに比べてページフォールトの発生頻度は高い。
プリページング
必要なデータ及び、近いうちに必要になりそうなデータを主記憶装置に要求する。
メリット
必要になりそうなデータを実際に使用するとき、ページフォールトが発生せずに処理能力を維持できる。
デメリット
無駄に主記憶装置にデータを読み込む場合がある。
スラッシング
ページの置換えが多く発生すると、その分プログラムの処理能力が低下します。これをスラッシングと言います。
応用情報技術者試験での出題
応用情報技術者試験を突破するのに必要な知識はこれだけです。
![](https://shikaku-dou.com/wp-content/uploads/2023/06/aa9c52e62d0c61882f85350e3327c10a-1024x621.jpg)
出題例
応用情報技術者 午前試験
令和5年度春期問18
仮想記憶方式に関する記述のうち、適切なものはどれか。
ア LRUアルゴリズムは、使用後の経過時間が最長のページを置換対象とするページ置換アルゴリズムである。
イ アドレス変換をインデックス方式で行う場合は、主記憶に存在する全ページ分のページテーブルが必要になる。
ウ ページフォールトが発生した場合は、ガベージコレクションが必要である。
エ ページングが繰り返されるうちに多数の小さな空きメモリ領域が発生することを、フラグメンテーションという。
正解は”ア”
ちなみに、ページングで交換されるデータは固定長なのでフラグメンテーションは発生しません。
応用情報技術者 午前試験
令和4年度秋期問17
ほとんどのプログラムの大きさがページサイズの半分以下のシステムにおいて、ページサイズを半分にしたときに予想されるものはどれか。ここで、このシステムは主記憶が不足しがちで、多重度やスループットなどはシステム性能の限界で運用しているものとする。
ア ページサイズが小さくなるので、領域管理などのオーバーヘッドが減少する。
イ ページ内に余裕がなくなるので、ページ置換えによってシステム性能が低下する。
ウ ページ内の無駄な空き領域が減少するので、主記憶不足が緩和される。
エ ページフォールトの回数が増加するので、システム性能が低下する。
正解は”ウ”
ほとんどのプログラムの大きさがページサイズの半分以下ということは、現在は無駄に主記憶の領域をプログラムの為に準備していることになります。
なので、ページサイズを半分以下にすれば無駄に確保していた主記憶の領域を解放できるので、主記憶不足が緩和できます。
応用情報技術者 午前試験
令和3年度春期問19
ページング方式の仮想記憶において、ページアクセス時に発生する事象をその回数の多い順に並べたものはどれか。ここで、A≧Bは、Aの回数がBの回数以上、A=Bは、AとBの回数が常に同じであることを表す。
ア ページアウト≧ページイン≧ページフォルト
イ ページアウト≧ページフォールト≧ページイン
ウ ページフォールト=ページアウト≧ページイン
エ ページフォールト=ページイン≧ページアウト
正解は”エ”
ページフォールトが発生すれば絶対にページインをする必要があるので、
ページフォールト=ページインになります。
また、主記憶装置に空き領域があればページアウトはする必要が無いので、
ページイン≧ページアウトになります。